package Level02.One;

import java.util.concurrent.*;

/**
 * 请按以下步骤编写程序：
 * 1. 定义一个线程类，实现 Callable 接口。此线程可以计算 1--100 的所有数字的累
 * 加和。
 * 2. 定义测试类，和 main()方法，使用线程池启动线程，并获取计算结果，并将结
 * 果打印到控制台。
 */
public class Test {
    public static void main(String[] args) throws Exception {
        /*
        // 创建一个线程池
        ExecutorService pool = Executors.newFixedThreadPool(3);
        // 创建一个MyThread对象
        MyThread myThread = new MyThread();
        // 提交一个任务到线程池，并返回一个Future对象
        Future<Integer> submit = pool.submit(myThread);
        // 获取Future对象的结果
        Integer integer = submit.get();
        // 输出结果
        System.out.println("累加结果为"+integer);
         */
        // 通过FutureTask包装Callable
        FutureTask<Integer> task = new FutureTask<>(new MyThread());
        Thread thread = new Thread(task);
        thread.start();
        Integer task1 = task.get();
        System.out.println("通过FutureTask包装Callable，结果为"+task1);
        // 通过线程池提交Callable
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        try {
            Future<Integer> submit1 = executorService.submit(new MyThread());
            Integer get = submit1.get();
            System.out.println("通过线程池提交Callable，结果为"+get);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }finally {
            executorService.shutdown();
        }
    }
}
